package com.example.demo.leetcode100题;

import com.example.demo.StopWatchTemplate;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

/**
 * @author：zzc
 * @date: 2022/8/31
 */
public class 找到所有数组中消失的数字 {
    //给你一个含 n 个整数的数组 nums ，其中 nums[i] 在区间 [1, n] 内。请你
    //找出所有在 [1, n] 范围内但没有出现在 nums 中的数字，并以数组的形式返回
    //结果。
    //示例 1：
    //输入：nums = [4,3,2,7,8,2,3,1]
    //输出：[5,6]
    //示例 2：
    //输入：nums = [1,1]
    //输出：[2]
    //提示：
    //n == nums.length
    //1 <= n <= 105
    //1 <= nums[i] <= n

    public static void main(String[] args) {
        System.out.println(StopWatchTemplate.doSupplier(() -> getMissingNums(new int[]{4,3,2,7,8,2,3,1})));
    }

    private static List<Integer> getMissingNums(int[] nums) {
        List<Integer> res = new ArrayList<>();
        HashSet<Integer> set = new HashSet<>();
        for (int i = 0; i <nums.length; i++) {
            set.add(nums[i]);
        }
        for (int i = 1; i <= nums.length; i++) {
            if(set.add(i)){
                res.add(i);
            }
        }
        return res;
    }

}
